package proxy.dynamicproxy;

import proxy.factory.PCFactory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;


/**
 * 调用处理程序
 * 每个代理实例 (java.lang.reflect.Proxy) 都有一个关联的调用处理程序
 */
public class PCFactoryInvocationHandler implements InvocationHandler {
    /**
     * 被代理的对象
     */
    private PCFactory pcFactory;

    public PCFactoryInvocationHandler(PCFactory pcFactory) {
        this.pcFactory = pcFactory;
    }

    /**
     * @param proxy  代理类对象
     * @param method 代理对象执行的方法
     * @param args   代理对象执行方法的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 执行被代理的方法
        Object rst = method.invoke(pcFactory, args);

        // 对功能进行增加处理
        if (null != rst) {
            int price = (int) rst;
            price += 500;
            System.out.println("【动态代理】中间商佣金+500, 售价：" + price);
            rst = price;
        }

        return rst;
    }
}
